﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Text;
using EvaluacionExalmarOledbHelper;
using EvaluacionExalmarEntidades;
using EvaluacionExalmarInterfaces;
using System.Configuration;

namespace EvaluacionExalmarAccesoDatos
{
    public class Resultado : IResultado
    {
        #region IResultado Members

        private readonly String _sCadenaConexion =
    ConfigurationManager.ConnectionStrings["con"].ConnectionString;

        public IList<ResultadoInfo> Listar(ResultadoInfo oResultado)
        {
            var oListaResultado = new List<ResultadoInfo>();
            var query = new StringBuilder("Select Id_Empleado, Nombre, Apellido_Paterno, Apellido_Materno, Id_Competencia1, Promedio1, "
                + "Id_Competencia1, Promedio2, Id_Competencia3, Promedio3, Id_Competencia4, Promedio4, Id_Competencia5, Promedio5, "
                + "Id_Competencia6, Promedio6, NroEvaluaciones, Id_Area From ConsultaResultadosProceso3 ");

            if (oResultado != null)
            {
                var where = new StringBuilder("");
                if (oResultado.IdEmpleado.HasValue)
                {
                    where.Append(where.ToString().Equals("") ? " where " : " and ");
                    where.Append(" Id_Empleado = " + oResultado.IdEmpleado + "");
                }

                if (oResultado.Empleado.IdArea.HasValue)
                {
                    where.Append(where.ToString().Equals("") ? " where " : " and ");
                    where.Append(" Id_Area = " + oResultado.Empleado.IdArea + "");
                }

                query.Append(@where);
            }

            using (var drd = OleDbHelper.ExecuteReader(_sCadenaConexion, CommandType.Text, query.ToString()))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaResultado.Add(new ResultadoInfo(drd.GetInt32(0),
                                new EmpleadoInfo(drd.GetInt32(0), drd.GetString(1).Trim(), drd.GetString(2).Trim(), drd.GetString(3).Trim(), null, null, null, null, null),
                                drd.GetInt32(16), new CompetenciaInfo(drd.GetInt32(4), null, null), Double.Parse(drd.GetValue(5).ToString()),
                                new CompetenciaInfo(drd.GetInt32(6), null, null), Double.Parse(drd.GetValue(7).ToString()),
                                new CompetenciaInfo(drd.GetInt32(8), null, null), Double.Parse(drd.GetValue(9).ToString()),
                                new CompetenciaInfo(drd.GetInt32(10), null, null), Double.Parse(drd.GetValue(11).ToString()),
                                new CompetenciaInfo(drd.GetInt32(12), null, null), Double.Parse(drd.GetValue(13).ToString()),
                                new CompetenciaInfo(drd.GetInt32(14), null, null), Double.Parse(drd.GetValue(15).ToString()),
                                null, null
                                ));
                        }
                    }
                }
            }

            return oListaResultado;
        }

        public bool Registrar(IList<ResultadoInfo> oListaResultado)
        {
            throw new NotImplementedException();
        }

        public bool Actualizar(IList<ResultadoInfo> oListaResultado)
        {
            throw new NotImplementedException();
        }

        public IList<ResultadoInfo> Procesar()
        {
            var oListaResultado = new List<ResultadoInfo>();
            const String query = @"Select Id_Empleado, Nombre, Apellido_Paterno, Apellido_Materno, Id_Competencia1, Promedio1, " 
                + "Id_Competencia1, Promedio2, Id_Competencia3, Promedio3, Id_Competencia4, Promedio4, Id_Competencia5, Promedio5, "
                + "Id_Competencia6, Promedio6, NroEvaluaciones, Id_Area From ConsultaResultadosProceso3 Order by Id_Empleado";

            using (var drd = OleDbHelper.ExecuteReader(_sCadenaConexion, CommandType.Text, query))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaResultado.Add(new ResultadoInfo(drd.GetInt32(0), 
                                new EmpleadoInfo(drd.GetInt32(0), drd.GetString(1).Trim(), drd.GetString(2).Trim(), drd.GetString(3).Trim(), null, null, null, null, null), 
                                drd.GetInt32(16), new CompetenciaInfo(drd.GetInt32(4), null, null), Double.Parse(drd.GetValue(5).ToString()),
                                new CompetenciaInfo(drd.GetInt32(6), null, null), Double.Parse(drd.GetValue(7).ToString()),
                                new CompetenciaInfo(drd.GetInt32(8), null, null), Double.Parse(drd.GetValue(9).ToString()),
                                new CompetenciaInfo(drd.GetInt32(10), null, null), Double.Parse(drd.GetValue(11).ToString()),
                                new CompetenciaInfo(drd.GetInt32(12), null, null), Double.Parse(drd.GetValue(13).ToString()),
                                new CompetenciaInfo(drd.GetInt32(14), null, null), Double.Parse(drd.GetValue(15).ToString()), 
                                null, null
                                ));
                        }
                    }
                }
            }

            return oListaResultado;
        }

        #endregion
    }
}
